module hip.components.transform; version(none): import hip.systems.gameobject; public import hip.math.matrix; public import hip.math.vector; class HipTransformComponent : HipComponent { Matrix4* parentTransform; Matrix4 worldTransform; Matrix4 transform; this() { transform = Matrix4.identity; worldTransform = Matrix4.identity; } override void onStart() { HipGameObject thisParent = owner.parent; if(thisParent is null) return; HipTransformComponent c = thisParent.getComponent!HipTransformComponent; if(c !is null) parentTransform = &c.worldTransform; calculateWorld; } override void onRemove(){} override void update(float deltaTime){} void calculateWorld() { if(parentTransform !is null) worldTransform = (*parentTransform) * transform; else if(owner.parent !is null) { parentTransform = &owner.parent.getComponent!HipTransformComponent.worldTransform; worldTransform = (*parentTransform) * transform; } else worldTransform = transform; } Vector3 position(){return Vector3(transform[13], transform[14], transform[15]);} void setPosition(float x, float y, float z = 0){transform[13] = x; transform[14] = y; transform[15] = z;} Vector3 scale(){return Vector3(transform[0], transform[5], transform[10]);} void setScale(float x, float y, float z = 1){transform[0] = x; transform[5] = y; transform[10] = z;} }